{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 328
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 3798,
     "status": "ok",
     "timestamp": 1591127251908,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "SFT2Q81Nhmk6",
    "outputId": "de6804ec-1dbe-4a3b-faff-b8ee33fc044f"
   },
   "outputs": [],
   "source": [
    "#!nvidia-smi\n",
    "#using a GeForce GTX1080 Ti for reproducibility for all timing experiments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 54
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 8388,
     "status": "ok",
     "timestamp": 1591127256566,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "HkOPiDW8c_FB",
    "outputId": "ce692e24-992e-4a67-d49d-fa5e0ba82358"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "pytorch version:  1.5.0\n",
      "cuda available:  True\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import time\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "from torch import nn, optim, autograd\n",
    "from torch.nn import functional as F\n",
    "from torch.distributions.multivariate_normal import MultivariateNormal\n",
    "import numpy as np\n",
    "from sklearn.utils import shuffle as skshuffle\n",
    "from math import *\n",
    "from backpack import backpack, extend\n",
    "from backpack.extensions import KFAC, DiagHessian\n",
    "from sklearn.metrics import roc_auc_score\n",
    "import scipy\n",
    "from tqdm import tqdm, trange\n",
    "import pytest\n",
    "import matplotlib.pyplot as plt\n",
    "from LB_utils import * \n",
    "\n",
    "print(\"pytorch version: \", torch.__version__)\n",
    "print(\"cuda available: \", torch.cuda.is_available())\n",
    "\n",
    "s = 123\n",
    "np.random.seed(s)\n",
    "torch.manual_seed(s)\n",
    "torch.cuda.manual_seed(s)\n",
    "torch.backends.cudnn.deterministic = True\n",
    "torch.backends.cudnn.benchmark = False"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "k8E81UKkc_Fe"
   },
   "source": [
    "# Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 131
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 11201,
     "status": "ok",
     "timestamp": 1591127259394,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "JJ82fe_uc_GQ",
    "outputId": "52acf70d-05c4-4df2-8ec2-637273c4343d"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "BATCH_SIZE_TRAIN_CIFAR10 = 128\n",
    "BATCH_SIZE_TEST_CIFAR10 = 128\n",
    "\n",
    "transform_base = [transforms.ToTensor()]\n",
    "\n",
    "transform_train = transforms.Compose([\n",
    "    transforms.RandomHorizontalFlip(),\n",
    "    transforms.RandomCrop(32, padding=4, padding_mode='reflect'),\n",
    "    ] + transform_base)\n",
    "\n",
    "transform_test = transforms.Compose(transform_base)\n",
    "transform_train = transforms.RandomChoice([transform_train, transform_test])\n",
    "\n",
    "#~/data/cifar10\n",
    "CIFAR10_trainset = torchvision.datasets.CIFAR10(root='~/data/cifar10', train=True, download=True, transform=transform_train)\n",
    "CIFAR10_train_loader = torch.utils.data.DataLoader(CIFAR10_trainset, batch_size=BATCH_SIZE_TRAIN_CIFAR10, shuffle=True, num_workers=2)\n",
    "\n",
    "#~/data/cifar10\n",
    "CIFAR10_testset = torchvision.datasets.CIFAR10(root='~/data/cifar10', train=False, download=True, transform=transform_test)\n",
    "CIFAR10_test_loader = torch.utils.data.DataLoader(CIFAR10_testset, batch_size=BATCH_SIZE_TEST_CIFAR10, shuffle=False, num_workers=2)\n",
    "\n",
    "classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')\n",
    "\n",
    "dataiter = iter(CIFAR10_train_loader)\n",
    "images, labels = dataiter.next()\n",
    "nrow = int(BATCH_SIZE_TRAIN_CIFAR10/4)\n",
    "imshow(torchvision.utils.make_grid(images, nrow=nrow))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 131
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 13813,
     "status": "ok",
     "timestamp": 1591127262026,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "GfOmcawIc_Gt",
    "outputId": "06e3cec0-ca61-441d-937f-61c4b01f1f35"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Files already downloaded and verified\n",
      "Files already downloaded and verified\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#load in CIFAR100\n",
    "BATCH_SIZE_TRAIN_CIFAR100 = 128\n",
    "BATCH_SIZE_TEST_CIFAR100 = 128\n",
    "\n",
    "#'~/data/cifar100'\n",
    "CIFAR100_train = torchvision.datasets.CIFAR100(root='~/data/cifar100', train=True,\n",
    "                                       download=True, transform=transform_train)\n",
    "CIFAR100_train_loader = torch.utils.data.DataLoader(CIFAR100_train, batch_size=BATCH_SIZE_TRAIN_CIFAR100,\n",
    "                                         shuffle=False)\n",
    "#'~/data/cifar100'\n",
    "CIFAR100_test = torchvision.datasets.CIFAR100(root='~/data/cifar100', train=False,\n",
    "                                       download=True, transform=transform_test)\n",
    "CIFAR100_test_loader = torch.utils.data.DataLoader(CIFAR100_test, batch_size=BATCH_SIZE_TEST_CIFAR100,\n",
    "                                         shuffle=False)\n",
    "\n",
    "CIFAR100_classes = [\n",
    "    'apple', 'aquarium_fish', 'baby', 'bear', 'beaver', 'bed', 'bee', 'beetle', \n",
    "    'bicycle', 'bottle', 'bowl', 'boy', 'bridge', 'bus', 'butterfly', 'camel', \n",
    "    'can', 'castle', 'caterpillar', 'cattle', 'chair', 'chimpanzee', 'clock', \n",
    "    'cloud', 'cockroach', 'couch', 'crab', 'crocodile', 'cup', 'dinosaur', \n",
    "    'dolphin', 'elephant', 'flatfish', 'forest', 'fox', 'girl', 'hamster', \n",
    "    'house', 'kangaroo', 'keyboard', 'lamp', 'lawn_mower', 'leopard', 'lion',\n",
    "    'lizard', 'lobster', 'man', 'maple_tree', 'motorcycle', 'mountain', 'mouse',\n",
    "    'mushroom', 'oak_tree', 'orange', 'orchid', 'otter', 'palm_tree', 'pear',\n",
    "    'pickup_truck', 'pine_tree', 'plain', 'plate', 'poppy', 'porcupine',\n",
    "    'possum', 'rabbit', 'raccoon', 'ray', 'road', 'rocket', 'rose',\n",
    "    'sea', 'seal', 'shark', 'shrew', 'skunk', 'skyscraper', 'snail', 'snake',\n",
    "    'spider', 'squirrel', 'streetcar', 'sunflower', 'sweet_pepper', 'table',\n",
    "    'tank', 'telephone', 'television', 'tiger', 'tractor', 'train', 'trout',\n",
    "    'tulip', 'turtle', 'wardrobe', 'whale', 'willow_tree', 'wolf', 'woman',\n",
    "    'worm'\n",
    "]\n",
    "\n",
    "dataiter = iter(CIFAR100_train_loader)\n",
    "images, labels = dataiter.next()\n",
    "nrow = int(BATCH_SIZE_TRAIN_CIFAR100/4)\n",
    "imshow(torchvision.utils.make_grid(images, nrow=nrow))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 131
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 17917,
     "status": "ok",
     "timestamp": 1591127266152,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "xDMTdXMNc_G8",
    "outputId": "8bcde526-58de-4aaf-801e-12483f9e2a23"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# load SVHN\n",
    "BATCH_SIZE_TRAIN_SVHN = 128\n",
    "BATCH_SIZE_TEST_SVHN = 128\n",
    "\n",
    "#'~/data/SVHN'\n",
    "train_data_SVHN = torchvision.datasets.SVHN('~/data/SVHN', split='train',\n",
    "                             download=False, transform=transform_train)\n",
    "\n",
    "#'~/data/SVHN'\n",
    "test_data_SVHN = torchvision.datasets.SVHN('~/data/SVHN', split='test',\n",
    "                             download=False, transform=transform_test)\n",
    "\n",
    "SVHN_train_loader = torch.utils.data.DataLoader(test_data_SVHN, batch_size=BATCH_SIZE_TRAIN_SVHN)\n",
    "SVHN_test_loader = torch.utils.data.DataLoader(test_data_SVHN, batch_size=BATCH_SIZE_TEST_SVHN)\n",
    "\n",
    "dataiter = iter(SVHN_train_loader)\n",
    "images, labels = dataiter.next()\n",
    "nrow = int(BATCH_SIZE_TRAIN_SVHN/4)\n",
    "imshow(torchvision.utils.make_grid(images, nrow=nrow))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ySv8B-GHc_HE"
   },
   "source": [
    "# Train CIFAR10 on ResNet18 (or load weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "sjkkKSjFc_HG"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torch.nn.functional as F\n",
    "import torch.backends.cudnn as cudnn\n",
    "\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "qnu4LyH3c_HL"
   },
   "outputs": [],
   "source": [
    "class BasicBlock(nn.Module):\n",
    "    expansion = 1\n",
    "\n",
    "    def __init__(self, in_planes, planes, stride=1):\n",
    "        super(BasicBlock, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, stride=stride, padding=1, bias=False)\n",
    "        self.bn1 = nn.BatchNorm2d(planes)\n",
    "        self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=1, padding=1, bias=False)\n",
    "        self.bn2 = nn.BatchNorm2d(planes)\n",
    "\n",
    "        self.shortcut = nn.Sequential()\n",
    "        if stride != 1 or in_planes != self.expansion*planes:\n",
    "            self.shortcut = nn.Sequential(\n",
    "                nn.Conv2d(in_planes, self.expansion*planes, kernel_size=1, stride=stride, bias=False),\n",
    "                nn.BatchNorm2d(self.expansion*planes)\n",
    "            )\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = F.relu(self.bn1(self.conv1(x)))\n",
    "        out = self.bn2(self.conv2(out))\n",
    "        out += self.shortcut(x)\n",
    "        out = F.relu(out)\n",
    "        return out\n",
    "\n",
    "\n",
    "class ResNet(nn.Module):\n",
    "    def __init__(self, block, num_blocks, num_classes=10, num_of_channels=3):\n",
    "        super(ResNet, self).__init__()\n",
    "        self.in_planes = 64\n",
    "\n",
    "        self.conv1 = nn.Conv2d(num_of_channels, 64, kernel_size=3, stride=1, padding=1, bias=False)\n",
    "        self.bn1 = nn.BatchNorm2d(64)\n",
    "        self.layer1 = self._make_layer(block, 64, num_blocks[0], stride=1)\n",
    "        self.layer2 = self._make_layer(block, 128, num_blocks[1], stride=2)\n",
    "        self.layer3 = self._make_layer(block, 256, num_blocks[2], stride=2)\n",
    "        self.layer4 = self._make_layer(block, 512, num_blocks[3], stride=2)\n",
    "        self.linear = nn.Linear(512*block.expansion, num_classes)\n",
    "\n",
    "    def _make_layer(self, block, planes, num_blocks, stride):\n",
    "        strides = [stride] + [1]*(num_blocks-1)\n",
    "        layers = []\n",
    "        for stride in strides:\n",
    "            layers.append(block(self.in_planes, planes, stride))\n",
    "            self.in_planes = planes * block.expansion\n",
    "        return nn.Sequential(*layers)\n",
    "\n",
    "    def forward(self, x):\n",
    "        out = self.features(x)\n",
    "        out = self.linear(out)\n",
    "        return out\n",
    "\n",
    "    def features(self, x):\n",
    "        out = F.relu(self.bn1(self.conv1(x)))\n",
    "        out = self.layer1(out)\n",
    "        out = self.layer2(out)\n",
    "        out = self.layer3(out)\n",
    "        out = self.layer4(out)\n",
    "        out = F.avg_pool2d(out, 4)\n",
    "        out = out.view(out.size(0), -1)\n",
    "        return out\n",
    "\n",
    "\n",
    "def ResNet18(num_of_channels=3, num_classes=10):\n",
    "    if num_classes <= 2:\n",
    "        num_classes = 1\n",
    "\n",
    "    return ResNet(BasicBlock, [2,2,2,2],\n",
    "                  num_of_channels=num_of_channels,\n",
    "                  num_classes=num_classes)\n",
    "\n",
    "def ResNet18(num_classes=10):\n",
    "    return ResNet(BasicBlock, [2,2,2,2], num_classes=num_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "ORChHBtxc_Hp"
   },
   "outputs": [],
   "source": [
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "cuda_status = torch.cuda.is_available()\n",
    "SVHN_model = ResNet18().to(device)\n",
    "best_acc = 0  # best test accuracy\n",
    "start_epoch = 0  # start from epoch 0 or last checkpoint epoch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "V2E-2hK3c_H7"
   },
   "outputs": [],
   "source": [
    "criterion = nn.CrossEntropyLoss()\n",
    "optimizer = optim.SGD(SVHN_model.parameters(), lr=0.1, momentum=0.9, weight_decay=5e-4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "U2xS8TCEc_IF"
   },
   "outputs": [],
   "source": [
    "# Training\n",
    "def train(net, epoch, optimizer, trainloader, filename):\n",
    "    print('\\nEpoch: %d' % epoch)\n",
    "    net.train()\n",
    "    train_loss = 0\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    for batch_idx, (inputs, targets) in enumerate(trainloader):\n",
    "        inputs, targets = inputs.to(device), targets.to(device)\n",
    "        optimizer.zero_grad()\n",
    "        outputs = net(inputs)\n",
    "        loss = criterion(outputs, targets)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "        train_loss += loss.item()\n",
    "        _, predicted = outputs.max(1)\n",
    "        total += targets.size(0)\n",
    "        correct += predicted.eq(targets).sum().item()\n",
    "        \n",
    "    \n",
    "    print(\"train loss: \", train_loss)\n",
    "    print(\"train accuracy: \", correct/total)\n",
    "    print(\"saving model at: {}\".format(filename))\n",
    "    torch.save(net.state_dict(), filename)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "GvrM1bILc_IO"
   },
   "outputs": [],
   "source": [
    "def test(net, epoch, testloader, path, save=False):\n",
    "    global best_acc\n",
    "    net.eval()\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    total = 0\n",
    "    with torch.no_grad():\n",
    "        for batch_idx, (inputs, targets) in enumerate(testloader):\n",
    "            inputs, targets = inputs.to(device), targets.to(device)\n",
    "            outputs = net(inputs)\n",
    "            loss = criterion(outputs, targets)\n",
    "\n",
    "            test_loss += loss.item()\n",
    "            _, predicted = outputs.max(1)\n",
    "            total += targets.size(0)\n",
    "            correct += predicted.eq(targets).sum().item()\n",
    "            \n",
    "        acc = correct/total\n",
    "        if acc > best_acc and save: \n",
    "            best_acc = acc\n",
    "            print(\"saving model at: {}\".format(path))\n",
    "            torch.save(net.state_dict(), path)\n",
    "\n",
    "\n",
    "        print(\"test loss: \", test_loss)\n",
    "        print(\"current acc: {}; best acc: {}\".format(acc, best_acc) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "g5_u3JBfc_IU"
   },
   "outputs": [],
   "source": [
    "def train_all():\n",
    "    SVHN_path = SVHN_PATH = 'pretrained_weights/SVHN_resnet18_s{}.pth'.format(s)\n",
    "    SVHN_path_best = SVHN_PATH = 'pretrained_weights/SVHN_resnet18_best_s{}.pth'.format(s)\n",
    "    lr = 0.1\n",
    "    epoch = 0\n",
    "    for e in [10, 10, 5]:\n",
    "        print(\"current learning rate: \", lr)\n",
    "        for _ in range(e):\n",
    "            optimizer = optim.SGD(SVHN_model.parameters(), lr=lr, momentum=0.9, weight_decay=5e-4)\n",
    "            train(SVHN_model, epoch, optimizer, SVHN_train_loader, SVHN_path)\n",
    "            test(SVHN_model, epoch, SVHN_test_loader, SVHN_path_best, save=True)\n",
    "            epoch += 1\n",
    "        lr /= 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "TBhBW8yFc_Ib"
   },
   "outputs": [],
   "source": [
    "#train_all()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 26693,
     "status": "ok",
     "timestamp": 1591127277070,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Ygkql29Oc_Ih",
    "outputId": "73450532-e13a-485c-dbe8-3cf32a06461e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading model from: pretrained_weights/SVHN_resnet18_pretrained.pth\n",
      "test loss:  0.5518008781364188\n",
      "current acc: 1.0; best acc: 0\n"
     ]
    }
   ],
   "source": [
    "##### if you already have a trained model ##############\n",
    "SVHN_PATH = 'pretrained_weights/SVHN_resnet18_pretrained.pth'\n",
    "#SVHN_PATH = 'pretrained_weights/SVHN_resnet18_best_s{}.pth'.format(s)\n",
    "SVHN_model = ResNet18().to(device)\n",
    "print(\"loading model from: {}\".format(SVHN_PATH))\n",
    "SVHN_model.load_state_dict(torch.load(SVHN_PATH))#, map_location=torch.device('cpu')))\n",
    "#test the model\n",
    "test(SVHN_model, 0, SVHN_test_loader, save=False, path=SVHN_PATH)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "YasrUI_6c_Ir"
   },
   "source": [
    "# prepare Gaussians (Diag and KFAC)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 129960,
     "status": "ok",
     "timestamp": 1588335246899,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "eVVdabzMc_JG",
    "outputId": "66302336-5029-4f2e-c37c-d211645b8ada"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n: 512 inputs to linear layer with m: 10 classes\n",
      "Batch: 0/204\n",
      "Batch: 1/204\n",
      "Batch: 2/204\n",
      "Batch: 3/204\n",
      "Batch: 4/204\n",
      "Batch: 5/204\n",
      "Batch: 6/204\n",
      "Batch: 7/204\n",
      "Batch: 8/204\n",
      "Batch: 9/204\n",
      "Batch: 10/204\n",
      "Batch: 11/204\n",
      "Batch: 12/204\n",
      "Batch: 13/204\n",
      "Batch: 14/204\n",
      "Batch: 15/204\n",
      "Batch: 16/204\n",
      "Batch: 17/204\n",
      "Batch: 18/204\n",
      "Batch: 19/204\n",
      "Batch: 20/204\n",
      "Batch: 21/204\n",
      "Batch: 22/204\n",
      "Batch: 23/204\n",
      "Batch: 24/204\n",
      "Batch: 25/204\n",
      "Batch: 26/204\n",
      "Batch: 27/204\n",
      "Batch: 28/204\n",
      "Batch: 29/204\n",
      "Batch: 30/204\n",
      "Batch: 31/204\n",
      "Batch: 32/204\n",
      "Batch: 33/204\n",
      "Batch: 34/204\n",
      "Batch: 35/204\n",
      "Batch: 36/204\n",
      "Batch: 37/204\n",
      "Batch: 38/204\n",
      "Batch: 39/204\n",
      "Batch: 40/204\n",
      "Batch: 41/204\n",
      "Batch: 42/204\n",
      "Batch: 43/204\n",
      "Batch: 44/204\n",
      "Batch: 45/204\n",
      "Batch: 46/204\n",
      "Batch: 47/204\n",
      "Batch: 48/204\n",
      "Batch: 49/204\n",
      "Batch: 50/204\n",
      "Batch: 51/204\n",
      "Batch: 52/204\n",
      "Batch: 53/204\n",
      "Batch: 54/204\n",
      "Batch: 55/204\n",
      "Batch: 56/204\n",
      "Batch: 57/204\n",
      "Batch: 58/204\n",
      "Batch: 59/204\n",
      "Batch: 60/204\n",
      "Batch: 61/204\n",
      "Batch: 62/204\n",
      "Batch: 63/204\n",
      "Batch: 64/204\n",
      "Batch: 65/204\n",
      "Batch: 66/204\n",
      "Batch: 67/204\n",
      "Batch: 68/204\n",
      "Batch: 69/204\n",
      "Batch: 70/204\n",
      "Batch: 71/204\n",
      "Batch: 72/204\n",
      "Batch: 73/204\n",
      "Batch: 74/204\n",
      "Batch: 75/204\n",
      "Batch: 76/204\n",
      "Batch: 77/204\n",
      "Batch: 78/204\n",
      "Batch: 79/204\n",
      "Batch: 80/204\n",
      "Batch: 81/204\n",
      "Batch: 82/204\n",
      "Batch: 83/204\n",
      "Batch: 84/204\n",
      "Batch: 85/204\n",
      "Batch: 86/204\n",
      "Batch: 87/204\n",
      "Batch: 88/204\n",
      "Batch: 89/204\n",
      "Batch: 90/204\n",
      "Batch: 91/204\n",
      "Batch: 92/204\n",
      "Batch: 93/204\n",
      "Batch: 94/204\n",
      "Batch: 95/204\n",
      "Batch: 96/204\n",
      "Batch: 97/204\n",
      "Batch: 98/204\n",
      "Batch: 99/204\n",
      "Batch: 100/204\n",
      "Batch: 101/204\n",
      "Batch: 102/204\n",
      "Batch: 103/204\n",
      "Batch: 104/204\n",
      "Batch: 105/204\n",
      "Batch: 106/204\n",
      "Batch: 107/204\n",
      "Batch: 108/204\n",
      "Batch: 109/204\n",
      "Batch: 110/204\n",
      "Batch: 111/204\n",
      "Batch: 112/204\n",
      "Batch: 113/204\n",
      "Batch: 114/204\n",
      "Batch: 115/204\n",
      "Batch: 116/204\n",
      "Batch: 117/204\n",
      "Batch: 118/204\n",
      "Batch: 119/204\n",
      "Batch: 120/204\n",
      "Batch: 121/204\n",
      "Batch: 122/204\n",
      "Batch: 123/204\n",
      "Batch: 124/204\n",
      "Batch: 125/204\n",
      "Batch: 126/204\n",
      "Batch: 127/204\n",
      "Batch: 128/204\n",
      "Batch: 129/204\n",
      "Batch: 130/204\n",
      "Batch: 131/204\n",
      "Batch: 132/204\n",
      "Batch: 133/204\n",
      "Batch: 134/204\n",
      "Batch: 135/204\n",
      "Batch: 136/204\n",
      "Batch: 137/204\n",
      "Batch: 138/204\n",
      "Batch: 139/204\n",
      "Batch: 140/204\n",
      "Batch: 141/204\n",
      "Batch: 142/204\n",
      "Batch: 143/204\n",
      "Batch: 144/204\n",
      "Batch: 145/204\n",
      "Batch: 146/204\n",
      "Batch: 147/204\n",
      "Batch: 148/204\n",
      "Batch: 149/204\n",
      "Batch: 150/204\n",
      "Batch: 151/204\n",
      "Batch: 152/204\n",
      "Batch: 153/204\n",
      "Batch: 154/204\n",
      "Batch: 155/204\n",
      "Batch: 156/204\n",
      "Batch: 157/204\n",
      "Batch: 158/204\n",
      "Batch: 159/204\n",
      "Batch: 160/204\n",
      "Batch: 161/204\n",
      "Batch: 162/204\n",
      "Batch: 163/204\n",
      "Batch: 164/204\n",
      "Batch: 165/204\n",
      "Batch: 166/204\n",
      "Batch: 167/204\n",
      "Batch: 168/204\n",
      "Batch: 169/204\n",
      "Batch: 170/204\n",
      "Batch: 171/204\n",
      "Batch: 172/204\n",
      "Batch: 173/204\n",
      "Batch: 174/204\n",
      "Batch: 175/204\n",
      "Batch: 176/204\n",
      "Batch: 177/204\n",
      "Batch: 178/204\n",
      "Batch: 179/204\n",
      "Batch: 180/204\n",
      "Batch: 181/204\n",
      "Batch: 182/204\n",
      "Batch: 183/204\n",
      "Batch: 184/204\n",
      "Batch: 185/204\n",
      "Batch: 186/204\n",
      "Batch: 187/204\n",
      "Batch: 188/204\n",
      "Batch: 189/204\n",
      "Batch: 190/204\n",
      "Batch: 191/204\n",
      "Batch: 192/204\n",
      "Batch: 193/204\n",
      "Batch: 194/204\n",
      "Batch: 195/204\n",
      "Batch: 196/204\n",
      "Batch: 197/204\n",
      "Batch: 198/204\n",
      "Batch: 199/204\n",
      "Batch: 200/204\n",
      "Batch: 201/204\n",
      "Batch: 202/204\n",
      "Batch: 203/204\n",
      "204\n",
      "M_W_post size:  torch.Size([512, 10])\n",
      "M_b_post size:  torch.Size([10])\n",
      "C_W_post size:  torch.Size([10, 512])\n",
      "C_b_post size:  torch.Size([10])\n"
     ]
    }
   ],
   "source": [
    "M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D = Diag_second_order(model=SVHN_model,\n",
    "                                                               train_loader=SVHN_train_loader,\n",
    "                                                               var0 = 1e-1, #1e-1\n",
    "                                                               device=device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 1000
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 40988,
     "status": "ok",
     "timestamp": 1591127296159,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "G9pcQTaNc_JP",
    "outputId": "658fcc51-09a1-47c7-f5ef-0fcb252f30b5"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Batch: 0/204\n",
      "Batch: 1/204\n",
      "Batch: 2/204\n",
      "Batch: 3/204\n",
      "Batch: 4/204\n",
      "Batch: 5/204\n",
      "Batch: 6/204\n",
      "Batch: 7/204\n",
      "Batch: 8/204\n",
      "Batch: 9/204\n",
      "Batch: 10/204\n",
      "Batch: 11/204\n",
      "Batch: 12/204\n",
      "Batch: 13/204\n",
      "Batch: 14/204\n",
      "Batch: 15/204\n",
      "Batch: 16/204\n",
      "Batch: 17/204\n",
      "Batch: 18/204\n",
      "Batch: 19/204\n",
      "Batch: 20/204\n",
      "Batch: 21/204\n",
      "Batch: 22/204\n",
      "Batch: 23/204\n",
      "Batch: 24/204\n",
      "Batch: 25/204\n",
      "Batch: 26/204\n",
      "Batch: 27/204\n",
      "Batch: 28/204\n",
      "Batch: 29/204\n",
      "Batch: 30/204\n",
      "Batch: 31/204\n",
      "Batch: 32/204\n",
      "Batch: 33/204\n",
      "Batch: 34/204\n",
      "Batch: 35/204\n",
      "Batch: 36/204\n",
      "Batch: 37/204\n",
      "Batch: 38/204\n",
      "Batch: 39/204\n",
      "Batch: 40/204\n",
      "Batch: 41/204\n",
      "Batch: 42/204\n",
      "Batch: 43/204\n",
      "Batch: 44/204\n",
      "Batch: 45/204\n",
      "Batch: 46/204\n",
      "Batch: 47/204\n",
      "Batch: 48/204\n",
      "Batch: 49/204\n",
      "Batch: 50/204\n",
      "Batch: 51/204\n",
      "Batch: 52/204\n",
      "Batch: 53/204\n",
      "Batch: 54/204\n",
      "Batch: 55/204\n",
      "Batch: 56/204\n",
      "Batch: 57/204\n",
      "Batch: 58/204\n",
      "Batch: 59/204\n",
      "Batch: 60/204\n",
      "Batch: 61/204\n",
      "Batch: 62/204\n",
      "Batch: 63/204\n",
      "Batch: 64/204\n",
      "Batch: 65/204\n",
      "Batch: 66/204\n",
      "Batch: 67/204\n",
      "Batch: 68/204\n",
      "Batch: 69/204\n",
      "Batch: 70/204\n",
      "Batch: 71/204\n",
      "Batch: 72/204\n",
      "Batch: 73/204\n",
      "Batch: 74/204\n",
      "Batch: 75/204\n",
      "Batch: 76/204\n",
      "Batch: 77/204\n",
      "Batch: 78/204\n",
      "Batch: 79/204\n",
      "Batch: 80/204\n",
      "Batch: 81/204\n",
      "Batch: 82/204\n",
      "Batch: 83/204\n",
      "Batch: 84/204\n",
      "Batch: 85/204\n",
      "Batch: 86/204\n",
      "Batch: 87/204\n",
      "Batch: 88/204\n",
      "Batch: 89/204\n",
      "Batch: 90/204\n",
      "Batch: 91/204\n",
      "Batch: 92/204\n",
      "Batch: 93/204\n",
      "Batch: 94/204\n",
      "Batch: 95/204\n",
      "Batch: 96/204\n",
      "Batch: 97/204\n",
      "Batch: 98/204\n",
      "Batch: 99/204\n",
      "Batch: 100/204\n",
      "Batch: 101/204\n",
      "Batch: 102/204\n",
      "Batch: 103/204\n",
      "Batch: 104/204\n",
      "Batch: 105/204\n",
      "Batch: 106/204\n",
      "Batch: 107/204\n",
      "Batch: 108/204\n",
      "Batch: 109/204\n",
      "Batch: 110/204\n",
      "Batch: 111/204\n",
      "Batch: 112/204\n",
      "Batch: 113/204\n",
      "Batch: 114/204\n",
      "Batch: 115/204\n",
      "Batch: 116/204\n",
      "Batch: 117/204\n",
      "Batch: 118/204\n",
      "Batch: 119/204\n",
      "Batch: 120/204\n",
      "Batch: 121/204\n",
      "Batch: 122/204\n",
      "Batch: 123/204\n",
      "Batch: 124/204\n",
      "Batch: 125/204\n",
      "Batch: 126/204\n",
      "Batch: 127/204\n",
      "Batch: 128/204\n",
      "Batch: 129/204\n",
      "Batch: 130/204\n",
      "Batch: 131/204\n",
      "Batch: 132/204\n",
      "Batch: 133/204\n",
      "Batch: 134/204\n",
      "Batch: 135/204\n",
      "Batch: 136/204\n",
      "Batch: 137/204\n",
      "Batch: 138/204\n",
      "Batch: 139/204\n",
      "Batch: 140/204\n",
      "Batch: 141/204\n",
      "Batch: 142/204\n",
      "Batch: 143/204\n",
      "Batch: 144/204\n",
      "Batch: 145/204\n",
      "Batch: 146/204\n",
      "Batch: 147/204\n",
      "Batch: 148/204\n",
      "Batch: 149/204\n",
      "Batch: 150/204\n",
      "Batch: 151/204\n",
      "Batch: 152/204\n",
      "Batch: 153/204\n",
      "Batch: 154/204\n",
      "Batch: 155/204\n",
      "Batch: 156/204\n",
      "Batch: 157/204\n",
      "Batch: 158/204\n",
      "Batch: 159/204\n",
      "Batch: 160/204\n",
      "Batch: 161/204\n",
      "Batch: 162/204\n",
      "Batch: 163/204\n",
      "Batch: 164/204\n",
      "Batch: 165/204\n",
      "Batch: 166/204\n",
      "Batch: 167/204\n",
      "Batch: 168/204\n",
      "Batch: 169/204\n",
      "Batch: 170/204\n",
      "Batch: 171/204\n",
      "Batch: 172/204\n",
      "Batch: 173/204\n",
      "Batch: 174/204\n",
      "Batch: 175/204\n",
      "Batch: 176/204\n",
      "Batch: 177/204\n",
      "Batch: 178/204\n",
      "Batch: 179/204\n",
      "Batch: 180/204\n",
      "Batch: 181/204\n",
      "Batch: 182/204\n",
      "Batch: 183/204\n",
      "Batch: 184/204\n",
      "Batch: 185/204\n",
      "Batch: 186/204\n",
      "Batch: 187/204\n",
      "Batch: 188/204\n",
      "Batch: 189/204\n",
      "Batch: 190/204\n",
      "Batch: 191/204\n",
      "Batch: 192/204\n",
      "Batch: 193/204\n",
      "Batch: 194/204\n",
      "Batch: 195/204\n",
      "Batch: 196/204\n",
      "Batch: 197/204\n",
      "Batch: 198/204\n",
      "Batch: 199/204\n",
      "Batch: 200/204\n",
      "Batch: 201/204\n",
      "Batch: 202/204\n",
      "Batch: 203/204\n",
      "M_W_post size:  torch.Size([512, 10])\n",
      "M_b_post size:  torch.Size([10])\n",
      "U_post size:  torch.Size([10, 10])\n",
      "V_post size:  torch.Size([512, 512])\n",
      "B_post size:  torch.Size([10, 10])\n"
     ]
    }
   ],
   "source": [
    "M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K = KFLP_second_order(model=SVHN_model,\n",
    "                                                               train_loader=SVHN_train_loader,\n",
    "                                                               var0 = 5, #5\n",
    "                                                               device=device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "eJsYd6Aec_Ke"
   },
   "outputs": [],
   "source": [
    "targets_CIFAR10 = CIFAR10_testset.targets\n",
    "targets_CIFAR100 = CIFAR100_test.targets\n",
    "targets_SVHN = []\n",
    "for x,y in SVHN_test_loader:\n",
    "    targets_SVHN.append(y)\n",
    "targets_SVHN = torch.cat(targets_SVHN).numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "uzCr_GFit3fP"
   },
   "outputs": [],
   "source": [
    "#number of samples to draw from the Gaussian\n",
    "num_samples = 1000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "BdICbIMYc_LJ"
   },
   "source": [
    "# MAP estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "EQfaElEvc_LK"
   },
   "outputs": [],
   "source": [
    "SVHN_test_in_MAP = predict_MAP(SVHN_model, SVHN_test_loader, cuda=cuda_status).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_MAP = predict_MAP(SVHN_model, CIFAR100_test_loader, cuda=cuda_status).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_MAP = predict_MAP(SVHN_model, CIFAR10_test_loader, cuda=cuda_status).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "uPMpD2cac_LP"
   },
   "outputs": [],
   "source": [
    "acc_in_MAP, prob_correct_in_MAP, ent_in_MAP, MMC_in_MAP = get_in_dist_values(SVHN_test_in_MAP, targets_SVHN)\n",
    "acc_out_CIFAR100_MAP, prob_correct_out_CIFAR100_MAP, ent_out_CIFAR100, MMC_out_CIFAR100_MAP, auroc_out_CIFAR100_MAP = get_out_dist_values(SVHN_test_in_MAP, SVHN_test_out_CIFAR100_MAP, targets_CIFAR100)\n",
    "acc_out_CIFAR10_MAP, prob_correct_out_CIFAR10_MAP, ent_out_CIFAR10, MMC_out_CIFAR10_MAP, auroc_out_CIFAR10_MAP = get_out_dist_values(SVHN_test_in_MAP, SVHN_test_out_CIFAR10_MAP, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 257808,
     "status": "ok",
     "timestamp": 1588335374794,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "26fknEjRc_LS",
    "outputId": "19f10a69-907b-4545-a3ce-6effc285ff5e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, MAP, SVHN] Accuracy: 1.000; average entropy: 0.015;     MMC: 0.997; Prob @ correct: 0.100\n",
      "[Out-MAP, KFAC, CIFAR100] Accuracy: 0.013; Average entropy: 0.948;    MMC: 0.682; AUROC: 0.985; Prob @ correct: 0.100\n",
      "[Out-MAP, KFAC, CIFAR10] Accuracy: 0.093; Average entropy: 0.959;    MMC: 0.680; AUROC: 0.986; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_MAP, prob_correct_in_MAP, ent_in_MAP, MMC_in_MAP, 'SVHN', 'MAP')\n",
    "print_out_dist_values(acc_out_CIFAR100_MAP, prob_correct_out_CIFAR100_MAP, ent_out_CIFAR100, MMC_out_CIFAR100_MAP, auroc_out_CIFAR100_MAP, 'CIFAR100', 'MAP')\n",
    "print_out_dist_values(acc_out_CIFAR10_MAP, prob_correct_out_CIFAR10_MAP, ent_out_CIFAR10, MMC_out_CIFAR10_MAP, auroc_out_CIFAR10_MAP, 'CIFAR10', 'MAP')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 127
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 257800,
     "status": "ok",
     "timestamp": 1588335374797,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "RHgarR_Dc_LY",
    "outputId": "23b2510b-0b26-40c5-938c-a4d8dda42cdd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.997 with std 0.000\n",
      "MMC out CIFAR100: 0.682 with std 0.000\n",
      "MMC out CIFAR10: 0.680 with std 0.000\n",
      "AUROC out CIFAR100: 0.985 with std 0.000\n",
      "AUROC out CIFAR10: 0.986 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#MAP estimate\n",
    "#seeds are 123,124,125,126,127\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.997, 0.997, 0.997, 0.997, 0.997]\n",
    "mmc_out_CIFAR100 = [0.682, 0.682, 0.682, 0.682, 0.682]\n",
    "mmc_out_CIFAR10 = [0.680, 0.680, 0.680, 0.680, 0.680]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.985, 0.985, 0.985, 0.985, 0.985]\n",
    "auroc_out_CIFAR10 = [0.986, 0.985, 0.986, 0.986, 0.986]\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "UqikIW_Cc_Lb"
   },
   "source": [
    "# Diagonal estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 311374,
     "status": "ok",
     "timestamp": 1588335428382,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "e38KQHHAc_Lc",
    "outputId": "111e76c6-6936-45b2-e6c3-71e5987b2caa"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for sampling with 1000 samples: 32.01017379760742\n",
      "time used for sampling with 1000 samples: 13.108839273452759\n",
      "time used for sampling with 1000 samples: 13.083177328109741\n"
     ]
    }
   ],
   "source": [
    "SVHN_test_in_D = predict_diagonal_sampling(SVHN_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_D = predict_diagonal_sampling(SVHN_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_D = predict_diagonal_sampling(SVHN_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "yotu_TyJc_Li"
   },
   "outputs": [],
   "source": [
    "acc_in_D, prob_correct_in_D, ent_in_D, MMC_in_D = get_in_dist_values(SVHN_test_in_D, targets_SVHN)\n",
    "acc_out_CIFAR100_D, prob_correct_out_CIFAR100_D, ent_out_CIFAR100_D, MMC_out_CIFAR100_D, auroc_out_CIFAR100_D = get_out_dist_values(SVHN_test_in_D, SVHN_test_out_CIFAR100_D, targets_CIFAR100)\n",
    "acc_out_CIFAR10_D, prob_correct_out_CIFAR10_D, ent_out_CIFAR10_D, MMC_out_CIFAR10_D, auroc_out_CIFAR10_D = get_out_dist_values(SVHN_test_in_D, SVHN_test_out_CIFAR10_D, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 311366,
     "status": "ok",
     "timestamp": 1588335428389,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "0E8xqHRbc_Ln",
    "outputId": "ca345f5f-1cdf-4f67-a72e-3195f30870ea"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, Diag, SVHN] Accuracy: 1.000; average entropy: 0.082;     MMC: 0.986; Prob @ correct: 0.100\n",
      "[Out-CIFAR100, Diag, SVHN] Accuracy: 0.013; Average entropy: 0.948;    MMC: 0.595; AUROC: 0.983; Prob @ correct: 0.100\n",
      "[Out-CIFAR10, Diag, SVHN] Accuracy: 0.094; Average entropy: 1.211;    MMC: 0.593; AUROC: 0.984; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_D, prob_correct_in_D, ent_in_D, MMC_in_D, 'SVHN', 'Diag')\n",
    "print_out_dist_values(acc_out_CIFAR100_D, prob_correct_out_CIFAR100_D, ent_out_CIFAR100, MMC_out_CIFAR100_D, auroc_out_CIFAR100_D, 'SVHN', 'CIFAR100', 'Diag')\n",
    "print_out_dist_values(acc_out_CIFAR10_D, prob_correct_out_CIFAR10_D, ent_out_CIFAR10_D, MMC_out_CIFAR10_D, auroc_out_CIFAR10_D,  'SVHN', 'CIFAR10', 'Diag')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 311344,
     "status": "ok",
     "timestamp": 1588335428393,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "lXVODmzEc_Lt",
    "outputId": "728aa15b-9929-4479-9d08-e5115235b9f4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sampling Bridge time in: 17.005 with std 0.121\n",
      "Sampling Bridge time out CIFAR100: 6.598 with std 0.088\n",
      "Sampling Bridge time out CIFAR10: 6.619 with std 0.081\n",
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.986 with std 0.000\n",
      "MMC out CIFAR100: 0.595 with std 0.000\n",
      "MMC out CIFAR10: 0.593 with std 0.000\n",
      "AUROC out CIFAR100: 0.984 with std 0.000\n",
      "AUROC out CIFAR10: 0.984 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Diag Sampling as presented in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [16.83299231529236, 16.928662061691284, 16.99160385131836, 17.175554513931274, 17.097065448760986]\n",
    "time_lpb_out_CIFAR100 = [6.512603521347046, 6.54141092300415, 6.559388160705566, 6.76048469543457, 6.613805294036865]\n",
    "time_lpb_out_CIFAR10 = [6.541447877883911, 6.52429461479187, 6.608020305633545, 6.688432693481445, 6.733151197433472]\n",
    "\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.986, 0.986, 0.986, 0.986, 0.986]\n",
    "mmc_out_CIFAR100 = [0.595, 0.595, 0.595, 0.595, 0.595]\n",
    "mmc_out_CIFAR10 = [0.593, 0.593, 0.593, 0.593, 0.593]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.983, 0.984, 0.984, 0.984, 0.984]\n",
    "auroc_out_CIFAR10 = [0.984, 0.984, 0.984, 0.984, 0.984]\n",
    "\n",
    "print(\"Sampling Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Sampling Bridge time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR100), np.std(time_lpb_out_CIFAR100)))\n",
    "print(\"Sampling Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "ZZj9IvJOc_MX"
   },
   "source": [
    "# KFAC estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 364032,
     "status": "ok",
     "timestamp": 1588335481091,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Xe76pG0wc_Ma",
    "outputId": "ced2a698-21f1-436c-fbc6-a95d0664f885"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for sampling with 1000 samples: 33.04068183898926\n",
      "time used for sampling with 1000 samples: 13.704692840576172\n",
      "time used for sampling with 1000 samples: 13.792467594146729\n"
     ]
    }
   ],
   "source": [
    "SVHN_test_in_K = predict_KFAC_sampling(SVHN_model, SVHN_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_K = predict_KFAC_sampling(SVHN_model, CIFAR100_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_K = predict_KFAC_sampling(SVHN_model, CIFAR10_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, n_samples=num_samples, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "8ARClhE8c_Mg"
   },
   "outputs": [],
   "source": [
    "acc_in_K, prob_correct_in_K, ent_in_K, MMC_in_K = get_in_dist_values(SVHN_test_in_K, targets_SVHN)\n",
    "acc_out_CIFAR100_K, prob_correct_out_CIFAR100_K, ent_out_CIFAR100_K, MMC_out_CIFAR100_K, auroc_out_CIFAR100_K = get_out_dist_values(SVHN_test_in_K, SVHN_test_out_CIFAR100_K, targets_CIFAR100)\n",
    "acc_out_CIFAR10_K, prob_correct_out_CIFAR10_K, ent_out_CIFAR10_K, MMC_out_CIFAR10_K, auroc_out_CIFAR10_K = get_out_dist_values(SVHN_test_in_K, SVHN_test_out_CIFAR10_K, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 364020,
     "status": "ok",
     "timestamp": 1588335481095,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "ewwgsSe9c_Ml",
    "outputId": "676d2a6b-61aa-409b-d20b-a06bd9c72352"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, KFAC, SVHN] Accuracy: 1.000; average entropy: 0.257;     MMC: 0.950; Prob @ correct: 0.100\n",
      "[Out-CIFAR100, KFAC, SVHN] Accuracy: 0.013; Average entropy: 0.948;    MMC: 0.465; AUROC: 0.985; Prob @ correct: 0.100\n",
      "[Out-CIFAR10, KFAC, SVHN] Accuracy: 0.093; Average entropy: 1.607;    MMC: 0.462; AUROC: 0.985; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_K, prob_correct_in_K, ent_in_K, MMC_in_K, 'SVHN', 'KFAC')\n",
    "print_out_dist_values(acc_out_CIFAR100_K, prob_correct_out_CIFAR100_K, ent_out_CIFAR100, MMC_out_CIFAR100_K, auroc_out_CIFAR100_K, 'SVHN', 'CIFAR100', 'KFAC')\n",
    "print_out_dist_values(acc_out_CIFAR10_K, prob_correct_out_CIFAR10_K, ent_out_CIFAR10_K, MMC_out_CIFAR10_K, auroc_out_CIFAR10_K,  'SVHN', 'CIFAR10', 'KFAC')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 363999,
     "status": "ok",
     "timestamp": 1588335481096,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "mRRO6uebc_Mq",
    "outputId": "a25f0cd4-bf0d-4590-c1ed-b2984be6cb49"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 17.092 with std 0.242\n",
      "Laplace Bridge time out CIFAR100: 6.617 with std 0.076\n",
      "Laplace Bridge time out CIFAR10: 6.622 with std 0.064\n",
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.948 with std 0.002\n",
      "MMC out CIFAR100: 0.461 with std 0.004\n",
      "MMC out CIFAR10: 0.458 with std 0.004\n",
      "AUROC out CIFAR100: 0.985 with std 0.000\n",
      "AUROC out CIFAR10: 0.986 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#KFAC approximation of the Hessian with 1000 samples as presented in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [16.841352701187134, 16.85959243774414, 17.49071955680847, 17.21457815170288, 17.052652597427368]\n",
    "time_lpb_out_CIFAR100 = [6.533518552780151, 6.543323278427124, 6.735061407089233, 6.667385816574097, 6.60345196723938]\n",
    "time_lpb_out_CIFAR10 = [6.62019944190979, 6.577003479003906, 6.714035511016846, 6.666292190551758, 6.533996105194092]\n",
    "\n",
    "\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.950, 0.945, 0.945, 0.949, 0.950]\n",
    "mmc_out_CIFAR100 = [0.465, 0.456, 0.457, 0.463, 0.465]\n",
    "mmc_out_CIFAR10 = [0.462, 0.454, 0.454, 0.460, 0.462]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.985, 0.985, 0.986, 0.986, 0.985]\n",
    "auroc_out_CIFAR10 = [0.985, 0.985, 0.986, 0.986, 0.986]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR100), np.std(time_lpb_out_CIFAR100)))\n",
    "print(\"Laplace Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "wl2O4llSc_M1"
   },
   "source": [
    "# Laplace Bridge estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 408810,
     "status": "ok",
     "timestamp": 1588335525913,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "wdwRD0V8c_M2",
    "outputId": "4b6772b7-e41b-401d-da7d-f0ec83b58701"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total time used for forward pass: 1.91057\n",
      "total time used for Laplace Bridge: 0.07484\n",
      "total time used for forward pass: 0.72389\n",
      "total time used for Laplace Bridge: 0.02783\n",
      "total time used for forward pass: 0.74741\n",
      "total time used for Laplace Bridge: 0.03021\n"
     ]
    }
   ],
   "source": [
    "SVHN_test_in_LB = predict_LB(SVHN_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, verbose=False, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_LB = predict_LB(SVHN_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_LB = predict_LB(SVHN_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "08wlLgMec_M9"
   },
   "outputs": [],
   "source": [
    "#normalize to get the MAP estimate (which is the mode) of the Dirichlet\n",
    "SVHN_test_in_LBn = SVHN_test_in_LB/SVHN_test_in_LB.sum(1).reshape(-1,1)\n",
    "SVHN_test_out_CIFAR100_LBn = SVHN_test_out_CIFAR100_LB/SVHN_test_out_CIFAR100_LB.sum(1).reshape(-1,1)\n",
    "SVHN_test_out_CIFAR10_LBn = SVHN_test_out_CIFAR10_LB/SVHN_test_out_CIFAR10_LB.sum(1).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "5BVHBhW5c_ND"
   },
   "outputs": [],
   "source": [
    "acc_in_LB, prob_correct_in_LB, ent_in_LB, MMC_in_LB = get_in_dist_values(SVHN_test_in_LBn, targets_SVHN)\n",
    "acc_out_CIFAR100_LB, prob_correct_out_CIFAR100_LB, ent_out_CIFAR100_LB, MMC_out_CIFAR100_LB, auroc_out_CIFAR100_LB = get_out_dist_values(SVHN_test_in_LBn, SVHN_test_out_CIFAR100_LBn, targets_CIFAR100)\n",
    "acc_out_CIFAR10_LB, prob_correct_out_CIFAR10_LB, ent_out_CIFAR10_LB, MMC_out_CIFAR10_LB, auroc_out_CIFAR10_LB = get_out_dist_values(SVHN_test_in_LBn, SVHN_test_out_CIFAR10_LBn, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 408800,
     "status": "ok",
     "timestamp": 1588335525921,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "NJx4wLw-c_NI",
    "outputId": "57b8d209-9441-48f2-c668-1dd6073d67c0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, Laplace Bridge, SVHN] Accuracy: 1.000; average entropy: 0.042;     MMC: 0.993; Prob @ correct: 0.100\n",
      "[Out-CIFAR100, Laplace Bridge, SVHN] Accuracy: 0.013; Average entropy: 1.490;    MMC: 0.526; AUROC: 0.985; Prob @ correct: 0.100\n",
      "[Out-CIFAR10, Laplace Bridge, SVHN] Accuracy: 0.093; Average entropy: 1.507;    MMC: 0.521; AUROC: 0.987; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_LB, prob_correct_in_LB, ent_in_LB, MMC_in_LB, 'SVHN', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_CIFAR100_LB, prob_correct_out_CIFAR100_LB, ent_out_CIFAR100_LB, MMC_out_CIFAR100_LB, auroc_out_CIFAR100_LB,  'SVHN', 'CIFAR100', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_CIFAR10_LB, prob_correct_out_CIFAR10_LB, ent_out_CIFAR10_LB, MMC_out_CIFAR10_LB, auroc_out_CIFAR10_LB,  'SVHN', 'CIFAR10', 'Laplace Bridge')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 0.042 with std 0.001\n",
      "Laplace Bridge time out CIFAR100: 0.017 with std 0.000\n",
      "Laplace Bridge time out CIFAR10: 0.017 with std 0.000\n",
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.993 with std 0.000\n",
      "MMC out CIFAR100: 0.616 with std 0.015\n",
      "MMC out CIFAR10: 0.618 with std 0.017\n",
      "AUROC out CIFAR100: 0.981 with std 0.004\n",
      "AUROC out CIFAR10: 0.981 with std 0.004\n"
     ]
    }
   ],
   "source": [
    "#Laplace Bridge as shown in the appendix (for comparison with other integral approximations)\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [0.04146, 0.04087, 0.04365, 0.04205, 0.04184]\n",
    "time_lpb_out_CIFAR100 = [0.01612, 0.01587, 0.01676, 0.01697, 0.01682]\n",
    "time_lpb_out_CIFAR10 = [0.01650, 0.01674, 0.01667, 0.01701, 0.01679]\n",
    "\n",
    "\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.994, 0.993, 0.993, 0.993, 0.993]\n",
    "mmc_out_CIFAR100 = [0.604, 0.605, 0.609, 0.643, 0.620]\n",
    "mmc_out_CIFAR10 = [0.603, 0.607, 0.607, 0.648, 0.626]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.986, 0.982, 0.981, 0.975, 0.981]\n",
    "auroc_out_CIFAR10 = [0.986, 0.983, 0.981, 0.975, 0.982]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR100), np.std(time_lpb_out_CIFAR100)))\n",
    "print(\"Laplace Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 408799,
     "status": "ok",
     "timestamp": 1588335525925,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "Pxhs0u1Dc_NP",
    "outputId": "8b77f8cb-bf27-48c5-94b8-0516b4842732"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 0.042 with std 0.001\n",
      "Laplace Bridge time out CIFAR100: 0.017 with std 0.000\n",
      "Laplace Bridge time out CIFAR10: 0.017 with std 0.000\n",
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.993 with std 0.000\n",
      "MMC out CIFAR100: 0.526 with std 0.000\n",
      "MMC out CIFAR10: 0.520 with std 0.000\n",
      "AUROC out CIFAR100: 0.985 with std 0.000\n",
      "AUROC out CIFAR10: 0.987 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Laplace Bridge as presented in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [0.04146, 0.04087, 0.04365, 0.04205, 0.04184]\n",
    "time_lpb_out_CIFAR100 = [0.01612, 0.01587, 0.01676, 0.01697, 0.01682]\n",
    "time_lpb_out_CIFAR10 = [0.01650, 0.01674, 0.01667, 0.01701, 0.01679]\n",
    "\n",
    "\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.993, 0.993, 0.993, 0.993, 0.992]\n",
    "mmc_out_CIFAR100 = [0.526, 0.526, 0.526, 0.526, 0.526]\n",
    "mmc_out_CIFAR10 = [0.520, 0.520, 0.520, 0.520, 0.520]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.985, 0.985, 0.985, 0.985, 0.985]\n",
    "auroc_out_CIFAR10 = [0.987, 0.987, 0.987, 0.987, 0.987]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR100), np.std(time_lpb_out_CIFAR100)))\n",
    "print(\"Laplace Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "HXIFDVzrNEVc"
   },
   "source": [
    "# Laplace Bridge KFAC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 48447,
     "status": "ok",
     "timestamp": 1591127308915,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "DJswBYBmNGvU",
    "outputId": "5f25aa88-a66d-45ad-dc43-e2430c4c2c89"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total time used for transform: 0.06438\n",
      "total time used for transform: 0.02375\n",
      "total time used for transform: 0.03124\n"
     ]
    }
   ],
   "source": [
    "SVHN_test_in_LB_KFAC = predict_LB_KFAC(SVHN_model, SVHN_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, cuda=cuda_status, verbose=False, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_LB_KFAC = predict_LB_KFAC(SVHN_model, CIFAR100_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_LB_KFAC = predict_LB_KFAC(SVHN_model, CIFAR10_test_loader, M_W_post_K, M_b_post_K, U_post_K, V_post_K, B_post_K, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "4guulMGcNGzz"
   },
   "outputs": [],
   "source": [
    "#normalize to get the MAP estimate (which is the mode) of the Dirichlet\n",
    "SVHN_test_in_LB_KFACn = SVHN_test_in_LB_KFAC/SVHN_test_in_LB_KFAC.sum(1).reshape(-1,1)\n",
    "SVHN_test_out_CIFAR100_LB_KFACn = SVHN_test_out_CIFAR100_LB_KFAC/SVHN_test_out_CIFAR100_LB_KFAC.sum(1).reshape(-1,1)\n",
    "SVHN_test_out_CIFAR10_LB_KFACn = SVHN_test_out_CIFAR10_LB_KFAC/SVHN_test_out_CIFAR10_LB_KFAC.sum(1).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "wdxWDZvWNGyd"
   },
   "outputs": [],
   "source": [
    "acc_in_LB_KFAC, prob_correct_in_LB_KFAC, ent_in_LB_KFAC, MMC_in_LB_KFAC = get_in_dist_values(SVHN_test_in_LB_KFACn, targets_SVHN)\n",
    "acc_out_CIFAR100_LB_KFAC, prob_correct_out_CIFAR100_LB_KFAC, ent_out_CIFAR100_LB_KFAC, MMC_out_CIFAR100_LB_KFAC, auroc_out_CIFAR100_LB_KFAC = get_out_dist_values(SVHN_test_in_LB_KFACn, SVHN_test_out_CIFAR100_LB_KFACn, targets_CIFAR100)\n",
    "acc_out_CIFAR10_LB_KFAC, prob_correct_out_CIFAR10_LB_KFAC, ent_out_CIFAR10_LB_KFAC, MMC_out_CIFAR10_LB_KFAC, auroc_out_CIFAR10_LB_KFAC = get_out_dist_values(SVHN_test_in_LB_KFACn, SVHN_test_out_CIFAR10_LB_KFACn, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 47996,
     "status": "ok",
     "timestamp": 1591127308929,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "xLwc7Z57NGt_",
    "outputId": "fd9c3c82-7b34-4b9d-9e82-d82200efcf81"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, Laplace Bridge, SVHN] Accuracy: 1.000; average entropy: 0.041;     MMC: 0.993; Prob @ correct: 0.100\n",
      "[Out-CIFAR100, Laplace Bridge, SVHN] Accuracy: 0.013; Average entropy: 1.477;    MMC: 0.530; AUROC: 0.985; Prob @ correct: 0.100\n",
      "[Out-CIFAR10, Laplace Bridge, SVHN] Accuracy: 0.093; Average entropy: 1.495;    MMC: 0.524; AUROC: 0.986; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_LB_KFAC, prob_correct_in_LB_KFAC, ent_in_LB_KFAC, MMC_in_LB_KFAC, 'SVHN', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_CIFAR100_LB_KFAC, prob_correct_out_CIFAR100_LB_KFAC, ent_out_CIFAR100_LB_KFAC, MMC_out_CIFAR100_LB_KFAC, auroc_out_CIFAR100_LB_KFAC, 'SVHN', 'CIFAR100', 'Laplace Bridge')\n",
    "print_out_dist_values(acc_out_CIFAR10_LB_KFAC, prob_correct_out_CIFAR10_LB_KFAC, ent_out_CIFAR10_LB_KFAC, MMC_out_CIFAR10_LB_KFAC, auroc_out_CIFAR10_LB_KFAC, 'SVHN', 'CIFAR10', 'Laplace Bridge')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 182
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 581,
     "status": "ok",
     "timestamp": 1591127373886,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "pLWLr_MJNGr6",
    "outputId": "d312b0cf-eda4-44cd-d1c4-7000031917f8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Laplace Bridge time in: 0.047 with std 0.000\n",
      "Laplace Bridge time out CIFAR100: 0.018 with std 0.000\n",
      "Laplace Bridge time out CIFAR10: 0.019 with std 0.000\n",
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.993 with std 0.000\n",
      "MMC out CIFAR100: 0.527 with std 0.002\n",
      "MMC out CIFAR10: 0.520 with std 0.002\n",
      "AUROC out CIFAR100: 0.985 with std 0.000\n",
      "AUROC out CIFAR10: 0.987 with std 0.000\n"
     ]
    }
   ],
   "source": [
    "#Laplace Bridge with KFAC as presented in the main paper\n",
    "#seeds are 123,124,125,126,127\n",
    "time_lpb_in = [0.04671, 0.04628, 0.04750, 0.04661, 0.04724]\n",
    "time_lpb_out_CIFAR100 = [0.01797, 0.01786, 0.01867, 0.01837, 0.01819]\n",
    "time_lpb_out_CIFAR10 = [0.01874, 0.01887, 0.01878, 0.01869, 0.01861]\n",
    "\n",
    "\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.993, 0.993, 0.993, 0.993, 0.993]\n",
    "mmc_out_CIFAR100 = [0.530, 0.528, 0.525, 0.526, 0.524]\n",
    "mmc_out_CIFAR10 = [0.524, 0.522, 0.520, 0.519, 0.517]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.985, 0.985, 0.985, 0.985, 0.985]\n",
    "auroc_out_CIFAR10 = [0.986, 0.987, 0.987, 0.987, 0.987]\n",
    "\n",
    "\n",
    "print(\"Laplace Bridge time in: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_in), np.std(time_lpb_in)))\n",
    "print(\"Laplace Bridge time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR100), np.std(time_lpb_out_CIFAR100)))\n",
    "print(\"Laplace Bridge time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_lpb_out_CIFAR10), np.std(time_lpb_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "vwCmAp4tNAp6"
   },
   "source": [
    "# Condition\n",
    "\n",
    "Test the condition derived in Proposition 1 of the paper and evaluated experimentally in Appendix A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "km2YkVT7c_NU"
   },
   "outputs": [],
   "source": [
    "# check if condition holds\n",
    "\n",
    "def check_condition(alpha_vecs):\n",
    "    #note that this is vectorized\n",
    "    alpha_sum = alpha_vecs.sum(1)\n",
    "    alpha_max = alpha_vecs.max(1)\n",
    "    alpha_sum_minus = alpha_sum - alpha_max\n",
    "    right_side = 0.25 * (np.sqrt(9 * alpha_sum_minus**2 + 10 * alpha_sum_minus + 1) - alpha_sum_minus - 1)\n",
    "    cases = alpha_max > right_side\n",
    "    percentage = np.sum(cases)/len(cases)\n",
    "    return(percentage)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 408788,
     "status": "ok",
     "timestamp": 1588335525928,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "hYEhWziEc_NX",
    "outputId": "19b8e333-4f99-4757-f1a1-bfcda614e956"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9994622003687769\n",
      "0.6686\n",
      "0.6529\n"
     ]
    }
   ],
   "source": [
    "print(np.sum(check_condition(SVHN_test_in_LB)))\n",
    "print(np.sum(check_condition(SVHN_test_out_CIFAR100_LB)))\n",
    "print(np.sum(check_condition(SVHN_test_out_CIFAR10_LB)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 72
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 408783,
     "status": "ok",
     "timestamp": 1588335525930,
     "user": {
      "displayName": "Marius Hobbhahn",
      "photoUrl": "",
      "userId": "09428085039491522481"
     },
     "user_tz": -120
    },
    "id": "R4zACU-Nm5qe",
    "outputId": "c4960787-c8bf-44d0-c32a-59eced893d69"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ratio condition fulfilled SVHN in: 0.999 with std: 1.1102230246251565e-16\n",
      "ratio condition fulfilled CIFAR100 out: 0.668 with std: 0.0\n",
      "ratio condition fulfilled CIFAR10 out: 0.653 with std: 0.0\n"
     ]
    }
   ],
   "source": [
    "condition_SVHN_in = np.array([0.9994622003687769, 0.9994622003687769, 0.9994622003687769, 0.9994622003687769, 0.9994622003687769])\n",
    "condition_CIFAR100_out = np.array([0.6685, 0.6685, 0.6685, 0.6685, 0.6685])\n",
    "condition_CIFAR10_out = np.array([0.6529, 0.6529, 0.6529, 0.6529, 0.6529])\n",
    "\n",
    "print(\"ratio condition fulfilled SVHN in: {:.03f} with std: {}\".format(np.mean(condition_SVHN_in), np.std(condition_SVHN_in)))\n",
    "print(\"ratio condition fulfilled CIFAR100 out: {:.03f} with std: {}\".format(np.mean(condition_CIFAR100_out), np.std(condition_CIFAR100_out)))\n",
    "print(\"ratio condition fulfilled CIFAR10 out: {:.03f} with std: {}\".format(np.mean(condition_CIFAR10_out), np.std(condition_CIFAR10_out)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "bR1uNvMheGat"
   },
   "source": [
    "# Compare to extended MacKay approach\n",
    "\n",
    "as detailed in appendix D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for forward pass: 2.0630764961242676\n",
      "time used for Extended MacKay Approach: 8.089476585388184\n",
      "time used for forward pass: 0.7970566749572754\n",
      "time used for Extended MacKay Approach: 1.9541175365447998\n",
      "time used for forward pass: 0.6669156551361084\n",
      "time used for Extended MacKay Approach: 1.2232730388641357\n"
     ]
    }
   ],
   "source": [
    "SVHN_test_in_EMK = predict_extended_MacKay(SVHN_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_EMK = predict_extended_MacKay(SVHN_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_EMK = predict_extended_MacKay(SVHN_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "acc_in_EMK, prob_correct_in_EMK, ent_in_EMK, MMC_in_EMK = get_in_dist_values(SVHN_test_in_EMK, targets_SVHN)\n",
    "acc_out_CIFAR100_EMK, prob_correct_out_CIFAR100_EMK, ent_out_CIFAR100_EMK, MMC_out_CIFAR100_EMK, auroc_out_CIFAR100_EMK = get_out_dist_values(SVHN_test_in_EMK, SVHN_test_out_CIFAR100_EMK, targets_CIFAR100)\n",
    "acc_out_CIFAR10_EMK, prob_correct_out_CIFAR10_EMK, ent_out_CIFAR10_EMK, MMC_out_CIFAR10_EMK, auroc_out_CIFAR10_EMK = get_out_dist_values(SVHN_test_in_EMK, SVHN_test_out_CIFAR10_EMK, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, EMK, SVHN] Accuracy: 1.000; average entropy: 0.092;     MMC: 0.985; Prob @ correct: 0.100\n",
      "[Out-EMK, KFAC, CIFAR100] Accuracy: 0.013; Average entropy: 1.206;    MMC: 0.605; AUROC: 0.984; Prob @ correct: 0.100\n",
      "[Out-EMK, KFAC, CIFAR10] Accuracy: 0.093; Average entropy: 1.215;    MMC: 0.603; AUROC: 0.985; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_EMK, prob_correct_in_EMK, ent_in_EMK, MMC_in_EMK, 'SVHN', 'EMK')\n",
    "print_out_dist_values(acc_out_CIFAR100_EMK, prob_correct_out_CIFAR100_EMK, ent_out_CIFAR100_EMK, MMC_out_CIFAR100_EMK, auroc_out_CIFAR100_EMK, 'CIFAR100', 'EMK')\n",
    "print_out_dist_values(acc_out_CIFAR10_EMK, prob_correct_out_CIFAR10_EMK, ent_out_CIFAR10_EMK, MMC_out_CIFAR10_EMK, auroc_out_CIFAR10_EMK, 'CIFAR10', 'EMK')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extended MacKay approach time in: 3.842 with std 0.041\n",
      "Extended MacKay approach time out CIFAR100: 1.468 with std 0.016\n",
      "Extended MacKay approach time out CIFAR10: 1.461 with std 0.017\n",
      "accuracy: 1.000 with std 0.000\n",
      "MMC in: 0.976 with std 0.002\n",
      "MMC out CIFAR100: 0.566 with std 0.007\n",
      "MMC out CIFAR10: 0.563 with std 0.007\n",
      "AUROC out CIFAR100: 0.984 with std 0.002\n",
      "AUROC out CIFAR10: 0.985 with std 0.002\n"
     ]
    }
   ],
   "source": [
    "#Extended MacKay approach results as in appendix D\n",
    "#seeds are 123,124,125,126,127\n",
    "time_EMK_in = [3.785594940185547, 3.818793296813965, 3.909949541091919, 3.842423439025879, 3.854236125946045]\n",
    "time_EMK_out_CIFAR100 = [1.4420478343963623, 1.4585347175598145, 1.477388858795166, 1.4860577583312988, 1.4757606983184814]\n",
    "time_EMK_out_CIFAR10 = [1.4354865550994873, 1.446882963180542, 1.48152494430542, 1.4732608795166016, 1.4691526889801025]\n",
    "\n",
    "acc_in = [1, 1, 1, 1, 1]\n",
    "mmc_in = [0.977, 0.978, 0.977, 0.974, 0.974]\n",
    "mmc_out_CIFAR100 = [0.554, 0.575, 0.567, 0.568, 0.564]\n",
    "mmc_out_CIFAR10 = [0.551, 0.570, 0.562, 0.570, 0.564]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.987, 0.984, 0.983, 0.981, 0.983]\n",
    "auroc_out_CIFAR10 = [0.988, 0.986, 0.985, 0.982, 0.985]\n",
    "\n",
    "print(\"Extended MacKay approach time in: {:.03f} with std {:.03f}\".format(np.mean(time_EMK_in), np.std(time_EMK_in)))\n",
    "print(\"Extended MacKay approach time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_EMK_out_CIFAR100), np.std(time_EMK_out_CIFAR100)))\n",
    "print(\"Extended MacKay approach time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_EMK_out_CIFAR10), np.std(time_EMK_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Compare to Second-order Delta Posterior Predictive\n",
    "\n",
    "as explained in appendix D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time used for forward pass: 1.6902434825897217\n",
      "time used for Second order delta posterior predictive: 0.10398411750793457\n",
      "time used for forward pass: 0.6496868133544922\n",
      "time used for Second order delta posterior predictive: 0.03999686241149902\n",
      "time used for forward pass: 0.657750129699707\n",
      "time used for Second order delta posterior predictive: 0.04147005081176758\n"
     ]
    }
   ],
   "source": [
    "SVHN_test_in_SODPP = predict_SODPP(SVHN_model, SVHN_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR100_SODPP = predict_SODPP(SVHN_model, CIFAR100_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()\n",
    "SVHN_test_out_CIFAR10_SODPP = predict_SODPP(SVHN_model, CIFAR10_test_loader, M_W_post_D, M_b_post_D, C_W_post_D, C_b_post_D, cuda=cuda_status, timing=True).cpu().numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "acc_in_SODPP, prob_correct_in_SODPP, ent_in_SODPP, MMC_in_SODPP = get_in_dist_values(SVHN_test_in_SODPP, targets_SVHN)\n",
    "acc_out_CIFAR100_SODPP, prob_correct_out_CIFAR100_SODPP, ent_out_CIFAR100_SODPP, MMC_out_CIFAR100_SODPP, auroc_out_CIFAR100_SODPP = get_out_dist_values(SVHN_test_in_SODPP, SVHN_test_out_CIFAR100_SODPP, targets_CIFAR100)\n",
    "acc_out_CIFAR10_SODPP, prob_correct_out_CIFAR10_SODPP, ent_out_CIFAR10_SODPP, MMC_out_CIFAR10_SODPP, auroc_out_CIFAR10_SODPP = get_out_dist_values(SVHN_test_in_SODPP, SVHN_test_out_CIFAR10_SODPP, targets_CIFAR10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[In, SODPP, SVHN] Accuracy: 1.000; average entropy: 0.037;     MMC: 0.993; Prob @ correct: 0.100\n",
      "[Out-SODPP, KFAC, CIFAR100] Accuracy: 0.013; Average entropy: 1.193;    MMC: 0.574; AUROC: 0.984; Prob @ correct: 0.100\n",
      "[Out-SODPP, KFAC, CIFAR10] Accuracy: 0.093; Average entropy: 1.204;    MMC: 0.572; AUROC: 0.985; Prob @ correct: 0.100\n"
     ]
    }
   ],
   "source": [
    "print_in_dist_values(acc_in_SODPP, prob_correct_in_SODPP, ent_in_SODPP, MMC_in_SODPP, 'SVHN', 'SODPP')\n",
    "print_out_dist_values(acc_out_CIFAR100_SODPP, prob_correct_out_CIFAR100_SODPP, ent_out_CIFAR100_SODPP, MMC_out_CIFAR100_SODPP, auroc_out_CIFAR100_EMK, 'CIFAR100', 'SODPP')\n",
    "print_out_dist_values(acc_out_CIFAR10_SODPP, prob_correct_out_CIFAR10_SODPP, ent_out_CIFAR10_SODPP, MMC_out_CIFAR10_SODPP, auroc_out_CIFAR10_EMK, 'CIFAR10', 'SODPP')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SODPP time in: 0.060 with std 0.001\n",
      "SODPP time out CIFAR100: 0.023 with std 0.001\n",
      "SODPP time out CIFAR10: 0.024 with std 0.001\n",
      "accuracy: 0.999 with std 0.000\n",
      "MMC in: 0.985 with std 0.002\n",
      "MMC out CIFAR100: 0.508 with std 0.008\n",
      "MMC out CIFAR10: 0.505 with std 0.009\n",
      "AUROC out CIFAR100: 0.984 with std 0.002\n",
      "AUROC out CIFAR10: 0.985 with std 0.002\n"
     ]
    }
   ],
   "source": [
    "# SODPP results as shown in appendix D\n",
    "#seeds are 123,124,125,126,127\n",
    "time_SODPP_in = [0.059853315353393555, 0.058516740798950195, 0.05945181846618652, 0.06099820137023926, 0.05915665626525879]\n",
    "time_SODPP_out_CIFAR100 = [0.023660898208618164, 0.02245783805847168, 0.02303767204284668, 0.02428603172302246, 0.023889541625976562]\n",
    "time_SODPP_out_CIFAR10 = [0.024647235870361328, 0.023304462432861328, 0.023253440856933594, 0.023926496505737305, 0.024631977081298828]\n",
    "\n",
    "acc_in = [0.999, 0.999, 0.999, 0.999, 0.999]\n",
    "mmc_in = [0.987, 0.987, 0.985, 0.984, 0.983]\n",
    "mmc_out_CIFAR100 = [0.496, 0.515, 0.507, 0.518, 0.503]\n",
    "mmc_out_CIFAR10 = [0.492, 0.510, 0.501, 0.518, 0.503]\n",
    "\n",
    "auroc_out_CIFAR100 = [0.987, 0.984, 0.983, 0.981, 0.983]\n",
    "auroc_out_CIFAR10 = [0.988, 0.986, 0.985, 0.982, 0.985]\n",
    "\n",
    "print(\"SODPP time in: {:.03f} with std {:.03f}\".format(np.mean(time_SODPP_in), np.std(time_SODPP_in)))\n",
    "print(\"SODPP time out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(time_SODPP_out_CIFAR100), np.std(time_SODPP_out_CIFAR100)))\n",
    "print(\"SODPP time out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(time_SODPP_out_CIFAR10), np.std(time_SODPP_out_CIFAR10)))\n",
    "\n",
    "print(\"accuracy: {:.03f} with std {:.03f}\".format(np.mean(acc_in), np.std(acc_in)))\n",
    "\n",
    "print(\"MMC in: {:.03f} with std {:.03f}\".format(np.mean(mmc_in), np.std(mmc_in)))\n",
    "print(\"MMC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR100), np.std(mmc_out_CIFAR100)))\n",
    "print(\"MMC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(mmc_out_CIFAR10), np.std(mmc_out_CIFAR10)))\n",
    "\n",
    "print(\"AUROC out CIFAR100: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR100), np.std(auroc_out_CIFAR100)))\n",
    "print(\"AUROC out CIFAR10: {:.03f} with std {:.03f}\".format(np.mean(auroc_out_CIFAR10), np.std(auroc_out_CIFAR10)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "collapsed_sections": [],
   "name": "Exp2_LPA_resnet_SVHN.ipynb",
   "provenance": [
    {
     "file_id": "1uEb18f6iWEMMfyUoBH1c_MJjVV9LayD7",
     "timestamp": 1588753109596
    },
    {
     "file_id": "1VhkPnCiC-FaV53c7VpDH44oeUMhNIIfy",
     "timestamp": 1587034936292
    }
   ],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
